﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using FotoLab.DomainLayer;
using FotoLab.DomainLayer.Model;
using FotoLab.Models;
using EntityState = System.Data.Entity.EntityState;

namespace FotoLab.Controllers
{
    public class ProductController : Controller
    {
        private DomainContext db = new DomainContext();

        // GET: Product
        public ActionResult Index()
        {
            try
            {
                var products = db.Producten.ToList();
                ViewBag.listProducts = products;
            }

            catch (Exception ex)
            {
                
            }

            return View(db.Producten.ToList());
        }

        public ActionResult Create()
        {
            return View();
        }

        // POST: Product/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "Naam, Prijs")] Product product)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Producten.Add(product);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            catch (DataException)
            {
                ModelState.AddModelError("", "Wijzigen is mislukt. Probeer opnieuw en als het probleem zich blijft voordoen, neem dan contact op met de beheerder.");
            }

            return View(product);
        }

        // GET: Product/Edit
        public ActionResult Edit(Guid? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            var product = db.Producten.Find(id);
            if (product == null)
            {
                return HttpNotFound();
            }
            return View(product);
        }

        // POST: Product/Edit
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "Id, Naam, Prijs")] Product product)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    db.Entry(product).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            catch (DataException)
            {
                ModelState.AddModelError("", "Wijzigen is mislukt. Probeer opnieuw en als het probleem zich blijft voordoen, neem dan contact op met de beheerder.");
            }

            return View(product);
        }

        // GET: Product/Delete
        public ActionResult Delete(Guid? id, bool? saveChangesError=false)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            if (saveChangesError.GetValueOrDefault())
            {
                ViewBag.ErrorMessage =
                    "Verwijderen is mislukt. Probeer opnieuw en als het probleem zich blijft voordoen, neem dan contact op met de beheerder.";
            }
            var product = db.Producten.Find(id);
            if (product == null)
            {
                return HttpNotFound();
            }
            return View(product);
        }

        // POST: Product/Delete
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Delete(Guid id)
        {
            try
            {
                Product product = db.Producten.Find(id);
                db.Producten.Remove(product);
                db.SaveChanges();
            }
            catch (DataException)
            {
                ModelState.AddModelError("", "Verwijderen is mislukt. Probeer opnieuw en als het probleem zich blijft voordoen, neem dan contact op met de beheerder.");
                return RedirectToAction("Delete", new {id = id, saveChangesError = true});
            }

            return RedirectToAction("Index");
        }
    }
}